<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <p>主要看==和===</p>
    <p>对应的有!=和!==</p>
    <p>==是“宽松相等”，===是“严格相等”</p>

    <hr>

    <h2>==</h2>
    <p>==会在比较之前进行类型转换，具体转换优先级规则如下：</p>
    <p>优先级越低，越先被转换为优先级高的类型</p>

    <h3>数字 > 字符串</h3>
    <p>如果一个操作数是字符串，另一个是数字，字符串会被转换为数字。</p>
    <p>例如，'5' == 5 会转换为 5 == 5，结果为 true。</p>

    <h3>数字 > 布尔</h3>
    <p>布尔值会被转换为数字，true 转换为 1，false 转换为 0。</p>
    <p>例如，true == 1 会转换为 1 == 1，结果为 true。</p>

    <h3>原始类型 > 对象</h3>
    <p>如果一个操作数是对象，另一个是原始类型（如数字、字符串），对象会被转换为原始类型。</p>
    <p>对象转换为原始类型的规则是先调用对象的 valueOf 方法，如果结果是原始类型，则使用该结果；否则，调用 toString 方法。</p>
    <p>例如，[1] == 1 会转换为 1 == 1，结果为 true。</p>

    <h3>null 和 undefined 只等于它们自己和彼此</h3>
    <p>null == undefined 结果为 true，但 null == 0 结果为 false。</p>

    <h2>===</h2>

    <p>===在比较前不会类型转换，就像一般的python中的==效果一样</p>

    <hr>

    <p>注意在>和<中，也是宽松的比较</p>

    <script>
        console.log("1" == 1);
        console.log("1" === 1);
        console.log("1" != 1);
        console.log("1" !== 1);
    </script>
</body>

</html>